'''
Created on 04/06/2014

@author: Vitor e Monique
'''
from funcoesAuxiliares.funcaoHeaviside import heaviside

'''
Função que verifica se um animal é ou nao mamífero

Utiliza funcao heaviside.

Caso 0 = não Mamífero
Caso 1 = Mamífero
'''
def verificaMamífero(vetorEntradas, omegas, teta):
    
    '''
    yEncontrado = Sum(omega[i]*entrada[i]) - teta
    '''
    yEncontrado = 0
    for j in range(len(omegas)):
        yEncontrado += omegas[j]*int(vetorEntradas[j+1])
    yEncontrado -= teta
    
    return heaviside(yEncontrado)

'''
Coloca num arquivo ../resultados.txt os resultados dos testes com os animais que não foram treinados 

Retorna uma lista com estes resultados e um contador de quantos acertos o perceptron teve

listaAtributos = lista de listas restornada pela função escolheEntradas
yDesejado = lista restornada pela função escolheEntradas
omegas = lista de omegas encontrados no treinamento
teta = teta encontrado no treinamento
path = caminho onde será escrito o arquivo resultados.txt
'''
def testaAnimais(listaAtributos, yDesejado, omegas, teta, path):
    novaLista = [None]*len(listaAtributos)
    contadorDeAcertos = 0
    resultados = open(path+"resultados.txt", 'w')
    
    for i in range(len(listaAtributos)):
        novaLista[i] = []
        novaLista[i].append(listaAtributos[i][0])
        
        resultados.write(listaAtributos[i][0]+", ")
        
        if yDesejado[i] == 0:
            novaLista[i].append(yDesejado[i])
            resultados.write("nao Mamifero, ")
        else:
            novaLista[i].append(yDesejado[i])
            resultados.write("Mamifero, ")
        
        result = verificaMamífero(listaAtributos[i], omegas, teta)
        
        if result == 0:
            novaLista[i].append(result)
            resultados.write("nao Mamifero, ")
        else:
            novaLista[i].append(result)
            resultados.write("Mamifero, ")
            
        if yDesejado[i] == result:
            contadorDeAcertos += 1
            resultados.write("teste Positivo\n")
        else:
            resultados.write("teste Negativo\n")
            
    return novaLista, contadorDeAcertos